#include <algorithm>
#include <cstdint>
#include <iostream>
#include <istream>
#include <vector>

using ll = int64_t;

#define il static inline

ll n,x,d,ans=0;
std::vector<ll> m,p;
std::vector<ll> c;

il void dfs(ll nn,ll nx,ll nans){
    if(nn>n){
        ans=std::max(ans,nans);
        return;
    }
    if(nn==1)[[unlikely]]{
        for(ll i=0;i*m[nn]<=nx;i++){
            c[nn]=i;
            dfs(nn+1,nx-i*m[nn],nans+i);
        }
        return;
    }
    for(ll i=c[p[nn]];(i<=c[p[nn]]+d && i*m[nn]<=nx);i++){
        c[nn]=i;
        dfs(nn+1,nx-i*m[nn],nans+i);
    }
}

int main(){
    std::iostream::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);
    std::cin>>n>>x>>d;
    m.resize(n+1);
    p.resize(n+1);
    c.resize(n+1);
    std::cin>>m[1];
    for(ll i=2;i<=n;i++){
        std::cin>>m[i]>>p[i];
    }
    dfs(1,x,0);
    std::cout<<ans<<'\n';
}